home *** CD-ROM | disk | FTP | other *** search
- ; Launch Twin from the Desktop
- ; © 1990 Joe Abley
-
-
- ; Version 1.00
- ; Last updated 7 May 1990
-
-
- r0 RN 0
- r1 RN 1
- r2 RN 2
- r3 RN 3
- r4 RN 4
- r5 RN 5
- r6 RN 6
- r7 RN 7
- sp RN 12
- r13 RN 13
- lr RN 14
- pc RN 15
-
-
- TextFile * &FFF
-
- X * &20000
- ErrorNumber * 42
-
- HalfWidth * 4*16 ; half the width of a menu
-
-
- ; Memory management
-
- FreeMemory * &8600
-
- Buffer * FreeMemory
- Indirected * FreeMemory+&400
- Stack * FreeMemory+&800
-
-
-
- ORG &8000
-
- EntryPoint LDR sp, =Stack
- STMEA sp!, {lr}
-
- MOV r0, #200
- LDR r1, TaskWord
- ADR r2, TaskName
- SWI Wimp_Initialise
- STR r0, TaskWord
-
- SWI Hourglass_On
- BL InitTemplates
- BL InitIconBar
- SWI Hourglass_Off
- BL PollLoop
-
- LDR r0, TaskHandle
- LDR r1, TaskWord
- SWI Wimp_CloseDown
- LDMEA sp!, {pc}
-
-
- TaskWord DCB "TASK"
-
- TaskName DCB "Twin", 0
-
- TaskHandle DCD 0
-
-
- ; --------------------------------------------------------------
-
-
- InitTemplates STMEA sp!, {lr}
- ADR r1, TemplateName
- SWI Wimp_OpenTemplate
-
- ADRL r1, Buffer
- ADRL r2, Indirected
- ADD r3, r2, #&400
- MOV r4, #-1
- ADR r5, WindowName
- MOV r6, #0
-
- SWI Wimp_LoadTemplate
-
- ADRL r1, Buffer
- SWI Wimp_CreateWindow
- STR r0, WindowHandle
-
- SWI Wimp_CloseTemplate
- LDMEA sp!, {pc}
-
-
- TemplateName DCB "<twin$dir>.Templates", 0
- ALIGN
-
- WindowName DCB "info"
- DCD 0, 0, 0
-
-
- ; --------------------------------------------------------------
-
-
- InitIconBar ADR r1, IconBlock
- SWI Wimp_CreateIcon
- STR r0, IconHandle
- MOV pc, lr
-
- IconHandle DCD 0
-
- IconBlock DCD -1
- DCD 0
- DCD 0
- DCD 68
- DCD 68
- DCD &311A
- DCD SpriteName
- DCD 1
- DCD 5
-
- SpriteName DCB "!twin", 0
-
-
- ; --------------------------------------------------------------
-
-
- PollLoop ADRL r1, Buffer
- LDR r0, =&1933
- SWI Wimp_Poll
-
- CMP r0, #2
- SWIEQ Wimp_OpenWindow
- BEQ PollLoop
-
- CMP r0, #3
- SWIEQ Wimp_CloseWindow
- BEQ PollLoop
-
- CMP r0, #6
- BEQ MouseClick
-
- CMP r0, #9
- BEQ MenuSelect
-
- CMP r0, #17
- CMPNE r0, #18
- BNE PollLoop
-
-
- ; --------------------------------------------------------------
-
-
- LDR r0, [r1, #16] ; get message type
-
- CMP r0, #0
- MOVEQ pc, lr
-
- CMP r0, #3
- BEQ DataLoad
-
- CMP r0, #1
- BEQ DataSave
-
- CMP r0, #5
- BEQ DataOpen
-
- B PollLoop
-
-
- ; --------------------------------------------------------------
-
-
- DataLoad LDR r2, [r1, #4] ; sender's task
- LDR r0, [r1, #8] ; fill in your_ref
- STR r0, [r1, #12]
- MOV r0, #4 ; DataLoad_Ack
- STR r0, [r1, #16]
- MOV r0, #17
-
- SWI Wimp_SendMessage ; Ack
-
- LDR r0, TwinCommand
- STR r0, Buffer
- MOV r0, #" "
- STRB r0, Buffer+4
-
- ADD r3, r1, #44
- ADRL r4, Buffer+5
-
- Copy1 LDRB r0, [r3]
- STRB r0, [r4]
- ADD r3, r3, #1
- ADD r4, r4, #1
- CMP r0, #32
- BGE Copy1
-
- ADRL r0, Buffer
- SWI Wimp_StartTask
-
- ADR r0, RemoveScrap
- SWI X+OS_CLI
-
- B PollLoop
-
- TwinCommand DCB "Twin"
-
- RemoveScrap DCB "Remove <Wimp$Scrap>", 0
-
-
- ; --------------------------------------------------------------
-
-
- DataOpen LDR r0, [r1, #40]
- LDR r2, =TextFile
- CMP r0, r2
- BEQ DataLoad
- B PollLoop
-
-
- ; --------------------------------------------------------------
-
-
- DataSave LDR r2, [r1, #4]
- LDR r0, [r1, #8] ; fill in your_ref
- STR r0, [r1, #12]
- MOV r0, #2 ; DataSave_Ack
- STR r0, [r1, #16]
- MOV r0, #60 ; New block size
- STR r0, [r1, #0]
-
- ADR r3, ScrapFile ; copy scrapfile name across
- MOV r4, #44
- Copy2 LDRB r0, [r3, #0]
- STRB r0, [r1, r4]
- ADD r3, r3, #1
- ADD r4, r4, #1
- CMP r0, #0
- BNE Copy2
-
- MOV r0, #17
- SWI Wimp_SendMessage
- B PollLoop
-
- ScrapFile DCB "<Wimp$Scrap>", 0, 0, 0, 0, 0, 0
-
-
- ; --------------------------------------------------------------
-
-
- MouseClick LDR r0, [r1, #8]
- CMP r0, #2
- BNE FileLess
-
- LDR r2, [r1, #0] ; Must be menu on our icon
- ADR r1, MenuBlock
- SUB r2, r2, #HalfWidth
- MOV r3, #95+2*44
- SWI Wimp_CreateMenu
-
- B PollLoop
-
- MenuBlock DCB "Twin"
- DCD 0, 0
- DCB 7, 2, 7, 0
- DCD HalfWidth*2, 44, 0
-
- DCD 0
- WindowHandle DCD 0
- DCD &7000021
- DCB "Info"
- DCD 0
- DCD 0
-
- DCD &80
- DCD -1
- DCD &7000021
- DCB "Quit", 0
-
- ; --------------------------------------------------------------
-
- FileLess LDR r0, TwinCommand
- STR r0, Buffer
- MOV r0, #13
- STRB r0, Buffer+4
- ADRL r0, Buffer
- SWI Wimp_StartTask
- B PollLoop
-
-
- ; --------------------------------------------------------------
-
-
- MenuSelect LDR r0, [r1, #0]
- CMP r0, #1
- BNE PollLoop
- MOV pc, lr
-
-
- ; --------------------------------------------------------------
-
-
- BreakPoint STMEA sp!, {r0-r2, lr}
- ADR r0, BreakErr
- MOV r1, #0
- ADR r2, BreakName
- SWI Wimp_ReportError
- LDMEA sp!, {r0-r2, pc}
-
- BreakErr DCB " Halted", 0
-
- BreakName DCB "BreakPoint", 0
-
- ProgramEnd
- END
-